package com.llu.verifySign;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class HmacSHA1Example {
    public static void main(String[] args) {
        try {
            String data = "Hello, World!";
            String key = "secret";

            // 生成HmacSHA1的认证码
            String hmacSHA1 = calculateHmacSHA1(data, key);

            System.out.println("HmacSHA1: " + hmacSHA1);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 计算HMAC-SHA1摘要
     *
     * @param data 待计算摘要的数据
     * @param key 用于生成HMAC-SHA1摘要的密钥
     * @return 计算得到的HMAC-SHA1摘要，以Base64字符串形式表示
     * @throws Exception 如果实例化Mac实例或编码密钥时发生错误
     */
    public static String calculateHmacSHA1(String data, String key) throws Exception {
        // 创建HmacSHA1的Mac实例
        Mac mac = Mac.getInstance("HmacSHA1");

        // 使用密钥初始化Mac实例
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA1");
        mac.init(secretKeySpec);

        // 计算数据的HmacSHA1摘要
        byte[] hmacSHA1Bytes = mac.doFinal(data.getBytes("UTF-8"));

        // 将摘要转换为Base64字符串
        return Base64.getEncoder().encodeToString(hmacSHA1Bytes);
    }

}

